/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package analiseSintatica.Regras.Comandos;

import AnaliseLexicaFinal.EstruturaDeDados.LinkToken;
import analiseSemantica.Tipos.TiposSemanticos;
import analiseSintatica.ErroSintaticoException;
import analiseSintatica.Regras.Regra;
import analiseSintatica.Regras.Expressoes.RegraExpressao;

import java.util.LinkedList;

/**
 *
 * @author Edney
 */
public class RegraReturn extends Regra {


    protected static Regra instancia;
    
    protected String estrutura = "return <expressao> ';'";

    
    /**
     * Construtor privado necessario ao singleton
     */
    private RegraReturn(){

    }

    /**
     * Retorna a unica instancia dessa classe.
     * @return
     */
    public static RegraReturn getInstance() {
        if (instancia == null) {
            instancia = new RegraReturn();
        }
        return (RegraReturn) instancia;
    }

    public TiposSemanticos analisar(LinkedList<LinkToken> tokens) throws ErroSintaticoException {
        
    	tokens.removeFirst();
    	
    	TiposSemanticos tiporeturn = RegraExpressao.getInstance().analisar(tokens);

    	reconheceLexema(tokens, "delimitador", ";", estrutura);

        return tiporeturn;
    }
    
    protected void setPrimeiro() {
        this.primeiro.add("return");
    }
}
